//
//  SEGUtils.h
//  SEGBasic
//
//  Created by 刘山 on 2018/3/15.
//  Copyright © 2018年 刘山. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "SEGBase64.h"

/// 如果是NSInteger、CGfloat等类型需要转成NSNumber
#define ValueToString(a) [SEGUtils ValueToString:(a)]
#define kAppName [SEGUtils segAppName]

typedef NS_ENUM(NSInteger, SEGSystemUtils_Time_Today_Type) {
    SEGSystemUtils_Time_Today_Type_Today = 0, //yyyy-MM-dd HH:mm
    SEGSystemUtils_Time_Today_Type_Year_Month_Day, //yyyy-MM-dd
    SEGSystemUtils_Time_Today_Type_Month_Day, //MM-dd
    SEGSystemUtils_Time_Today_Type_Hour_Min, //HH:mm
    SEGSystemUtils_Time_Today_Type_Year, //yyyy
    SEGSystemUtils_Time_Today_Type_Month, //MM
    SEGSystemUtils_Time_Today_Type_Day, //dd
    SEGSystemUtils_Time_Today_Type_Hour, //HH
    SEGSystemUtils_Time_Today_Type_Min, //mm
    SEGSystemUtils_Time_Today_Type_Today_T, //yyyy-MM-dd'T'HH:mm:ss
    SEGSystemUtils_Time_Today_Type_Today_ss //yyyy-MM-dd HH:mm:ss
};

@interface SEGUtils : NSObject

/**
 *  应用程序的发布版本号
 * @author Sam
 * @see  General - Identity - Version
 */
+(NSString*)segBundleShortVersionString;

/**
 * 设备的型号，例如iPhone5、iPhone6、iphone7等
 * @author Sam
 * @return iPhone5、iPhone6、iphone7等
 */
+ (NSString*)segDeviceHardWareName;

/**
 * 操作系统的版本号
 * @author Sam
 * @return e.g:@"4.0"
 */
+(NSString*)segDeviceSystemVersion;

/**
 * 把图片切到指定的尺寸 从中间开始改变大小
 * @author Sam
 */
+ (UIImage*)OriginImage:(UIImage*)image scaleToSize:(CGSize)targetSize;

/**
 *  设置界面字体的颜色和大小
 *
 *  @param obj      需要修改的对象
 *  @param fontSize 字体的尺寸
 *  @param color    字体的颜色，color：nil 不设置颜色 color：[UIColor RedColor] 字体为红色
 */
+ (void)setObj:(id)obj WithSize:(CGFloat)fontSize textColor:(UIColor*)color;

/**
 * 任意对象类数据类型转成NSString
 * @author Sam
 * @param objStr 任意类型的数据
 */
+ (NSString*)ValueToString:(id)objStr;

/**
 任意对象类型转换成NSInteger
 
 @param objStr 任意对象数据
 @return integer
 */
+ (NSInteger)ValueToInteger:(id)objStr;

/**
 * 把秒数转换成 xx天xx小时xx分钟
 * @author Sam
 * @param second  秒数
 * @return xx天xx小时xx分钟
 */
+(NSString*)timeLeftWithSecond:(NSString*)second;

/**
 * 返回指定格式的当前时间字符串
 * @author Sam
 * @param format  当前时间的格式
 */
+(NSString*)segCurrentTimeWithTimeFormate:(NSString*)format;

///  统计字符串的宽高
///
///  @param string   字符串内容
///  @param width    闲置最大的宽度
///  @param fontSize 字符串字体的大小
+ (CGSize)sizeWithConstrainedWithString:(NSString*)string
                                ToWidth:(CGFloat)width
                         WithFontOfSize:(CGFloat)fontSize;
/**
 获取文本宽度
 
 @param font 字体大小
 @param height 文本高度
 @param text 文本内容
 @return 文本宽度
 */
+ (CGFloat)getWidthWithFontSize:(CGFloat)font
                         height:(CGFloat)height
                           text:(NSString *)text;

/**
 * 获取显示时间
 * @author Wendy
 * @param time 时间戳字符串 13位
 * @return 显示的时间格式
 */
+ (NSString*)getShowDateWithTimer:(NSString*)time;

+ (NSString*)timeForTodayWithType:(SEGSystemUtils_Time_Today_Type)type;

+(NSInteger)timestampWithTime:(NSString *)time WithType:(SEGSystemUtils_Time_Today_Type)type;

+(NSString*)timeDateFormatType:(SEGSystemUtils_Time_Today_Type)type;

+ (NSString*)time:(NSString *)time Type:(SEGSystemUtils_Time_Today_Type)type;

/**
 根据给定的小时的毫秒级时间戳获得今天该小时完整的时间字符串
 @param dateStr 日期字符串 yyyy-MM-dd
 @param miliSecond 毫秒级小时时间戳
 @param formatterStr 返回的时间格式
 @return 时间字符串
 */
+(NSString *)getTimeStrWithDate:(NSString *)dateStr milliSecond:(NSString *)miliSecond formatterStr:(NSString *)formatterStr;

/**
 * 获取app名称
 * @author Sam
 */
+(NSString*)segAppName;

/**
 *  MD5加密
 */
+ (NSString*)md5:(NSString*)str;

//根据指定时间的字符串格式和时间 格式例如yyyy-MM-dd HH:mm:ss:SSS
+ (NSString*)stringDateByFormatString:(NSString*)formatString withDate:(NSDate*)date;

//字符串转换成日期
+ (NSDate*)dateFromString:(NSString*)datestring withFormatString:(NSString*)formatString;

/**
 消息中心中的详情界面 数据格式转换
 
 @param string 时间字符串 格式为yyyy-MM-dd HH:mm
 @return 显示时间 yyyy年MM月dd日 HH:mm／ MM月dd日 HH:mm／HH:mm
 */
+ (NSString *)getTimeStringInMessageDetailVCWithString:(NSString *)string;

//通过时间戳获取时间
+(NSString *)getTimeWithTimeStr:(NSString *)timeStr timeFormat:(NSString *)format;

///点赞数
+(NSString*)seg_numWithNum:(NSString*)num;

/// 获取埋点名称 为空时用"-"
+ (NSString *)getAnalyticsNameString:(NSString *)name;

/// 过滤地址信息中的“来自”
+ (NSString *)getShowAddressWithString:(NSString *)string;

//图片方向
+ (UIImage*)fixOrientation:(UIImage*)srcImg;

/**
 压缩图片
 
 @param tempImage 图片
 @return 压缩后的图片
 */
+(UIImage *)ScaleImage:(UIImage *)tempImage;

//等比压缩图片
+ (UIImage*)scaleImage:(UIImage*)aImage maxSize:(CGSize)aSize;

/// 压缩图片使图片文件小于指定大小
/// @param image image
/// @param maxLength 压缩最大长度(bytes)
+ (NSData *)compressImageQuality:(UIImage*)image maxLength:(NSInteger)maxLength;

//根据当前时间压缩图片添加水印
+(NSData *)ScaleImageAndMakeLogo:(UIImage *)tempImage;
//根据照片拍摄时间压缩图片加载水印
+(NSData *)ScaleImageAndMakeLogo:(UIImage *)tempImage creatDate:(NSDate *)date;

/**
 *  创建线条
 *
 *  @param rect 视图大小位置
 *
 *  @return 返回视图
 */
+ (UIView*)CreateLineView:(CGRect)rect;

+ (BOOL)isBlankString:(NSString*)string;
+ (NSArray *)arrayWithJsonString:(NSString *)jsonString;
+ (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString;

//获取富文本
+(NSMutableAttributedString *)getAttributeStringWith:(UIColor *)color font:(UIFont *)font textStr:(NSString *)textStr lineSpace:(CGFloat)lineSpace alignment:(NSTextAlignment)alignment;

/**
 *  修改文字的属性 颜色 字体 范围
 */
+ (NSMutableAttributedString *)getAttributedWithString:(NSString *)string Color:(UIColor *)color font:(UIFont *)font range:(NSRange)range;

//校验attrVaule是否有值
+(BOOL)checkAttrValueWith:(id)attrValue;

//获取document路径
+ (NSString*)documentPath;

//获取媒体文件存放路径
+ (NSString*)mideaFilePath;

//根据文件名获取媒体文件完整路径
+ (NSString*)mideaFilePathForFileName:(NSString*)aFileName;

//字符串转日期格式
+ (NSDate *)stringToDate:(NSString *)dateString withDateFormat:(NSString *)format;

//将世界时间转化为中国区时间
+ (NSDate *)worldTimeToChina:(NSDate *)date;

// 判断app是否第一次启动或者更新后第一次启动
+(BOOL)isFirstLoad;

/**
 *  判断输入的内容是不是为空
 */
+ (BOOL)isEmpty:(NSString*)str;

/**
 判断文本展示是否超过一行

 @param str    文本内容
 @param height 文本高度
 @param width  文本宽度
 @param font   文本描述

 @return 返回判断结果
 */
+(BOOL)isNeedMultiLineWithStr:(NSString *)str
                   withHeight:(CGFloat)height
                    withWidth:(CGFloat)width
                     withFont:(CGFloat)font;

/**
 通过URL获取图片大小
 
 @param imageUrl  图片url
 @return size
 */
+ (CGSize)getImageSizeWithImageUrl:(NSString *)imageUrl;

+ (void)judgeCameraAuthorizationStatus;


/**
 *  正则表达式
 *  @param textString 输入字符串
 *  @param code       正则表达式
 *  @return YES匹配  NO不匹配
 */
+ (BOOL)isExpressCode:(NSString *)textString expressStr:(NSString *)code;

//判断相机权限
- (void)judgeCameraAuthorizationStatus;

/**
 * Hmacsha1算法
 * @author Sam
 * @param text  加密参数
 * @param secret  签名秘钥
 */
+ (NSString *)seg_Hmacsha1:(NSString *)text key:(NSString *)secret;
@end

